#include <iostream>
using namespace std;

int main01(int argc, char const *argv[]){
        //普通引用
        int a = 10;
        int &b = a;
        printf("b:%d \n", b);
        
        //常引用
        int x = 20;
        const int &y = x;//常引用 让变量 拥有只读属性 不能通过y去修改x了
        //y = 21;//c++编译器会报错

        //常引用 初始化 分2种情况
        //1 用变量 初始化 常引用
        {
                int x1 = 30;
                const int &y1 = x1; //x1的变量去初始化 常引用
        }
        //2 用字面量 初始化 常量引用
        {
                const int a = 40;//c++编译器把a放在符号表中
                
                //int &n = 41;//普通引用 引用一个字面量 请问字面量有没有内存地址 c++编译失败
                //引用 就是给内存取多个门牌号别名
                //printf("&40:%d \n", 40);
                
                const int &m = 43; //c++编译器 会分配内存空间
        }

        return 0;
}

//
struct Teacher
{
        char name[64];
        int age;
};
//c++内部实现 void printfTeacher(const Teacher * const p)
void printfTeacher(const Teacher &p){
        //常引用 让 实参变量 拥有只读属性
        //p.age = 33;//c++编译器报错
        cout<<"age: "<<p.age<<endl;
}

int main(int argc, char const *argv[])
{
        Teacher t1;
        t1.age = 36;

        printfTeacher(t1);
        return 0;
}